package com.dsbj.mp.icardservice.controller.attendance;

import com.dsbj.common.msg.ResponseMessage;
import com.dsbj.mp.icardservice.controller.BaseController;
import com.dsbj.mp.icardservice.entity.MonthReport;
import com.dsbj.mp.icardservice.entity.Parameters;
import com.dsbj.mp.icardservice.model.MpUser;
import com.dsbj.mp.icardservice.service.attendance.MonthReportService;
import com.dsbj.mp.icardservice.service.ParametersService;
import com.dsbj.mp.icardservice.service.mcommon.McommonService;
import com.dsbj.mp.icardservice.utils.strprocess.MapProcess;
import com.dsbj.mp.icardservice.webserviceclient.dsbjpmc.AllowUser;
import com.dsbj.mp.icardservice.webserviceclient.dsbjpmc.AllowUserResponseMessage;
import com.dsbj.mp.icardservice.webserviceclient.dsbjpmc.JWSService;
import com.dsbj.mp.icardservice.webserviceclient.dsbjpmc.WxUser;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.*;

/**
 * @author from gipson-ocs,cjw 2019-12-31
 */
@RestController
@RequestMapping(value = "/attendance")
public class MonthReportQueryController extends BaseController {

	@Resource
	private MonthReportService monthReportService;

	@Resource
	private ParametersService parametersService;

	@Resource
	private JWSService jwsService;


	/**
	 * 根据条件获取该用户的MonthReport信息。
	 * 传入参数：yearmonth。
	 * @param request
	 * @param fanganName
	 */
	@RequestMapping("/getMonthReport")
	public ResponseMessage getMonthReport(HttpServletRequest request, MonthReport monthReport, String fanganName){

		//获取wxUser信息
		MpUser wxUser=(MpUser) request.getAttribute("wxUser");

		//首先找到该公司的考情参数 根据考情参数来判断这个月份的长度
		Parameters parameters=parametersService.getByCompanyno(wxUser.getCompanyno());
		//月份列表
		List<String> list1=new ArrayList<String>();
		int number=0;

		/**
		 * 若parameters.getIsdefaultstartend()为1，考勤日期范围例如[1,31]。
		 */
		Integer isDefaultStartEnd=parameters.getIsdefaultstartend();
		if(isDefaultStartEnd!=null && isDefaultStartEnd.intValue()==1){
			//若monthReport.getYearmonth()不为null
			if(monthReport.getYearmonth()!=null){
				//带了月份 根据月份做出改变
				int year=Integer.parseInt((monthReport.getYearmonth()+"").substring(0,4));
				int month=Integer.parseInt((monthReport.getYearmonth()+"").substring(4,6));

				if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12){
					for(int i=1;i<=31;i++){
						list1.add(i+"");
					}
					number=31;
				}else if(month==4 || month==6 || month==9 || month==11 ){
					for(int i=1;i<=30;i++){
						list1.add(i+"");
					}
					number=30;
				}else{//只剩下2月   做平年  闰年的判断
					if(year%4==0&&year%100!=0||year%400==0){//闰年  2月只有29天
						for(int i=1;i<=29;i++){
							list1.add(i+"");
						}
						number=29;
					}else{//平年 2月有28天
						for(int i=1;i<=28;i++){
							list1.add(i+"");
						}
						number=28;
					}
				}
			}else{
				//最初进来的时候的样子
				for(int i=1;i<=31;i++){
					list1.add(i+"");
				}
				number=31;
			}
		}else{
			/**
			 * 若parameters.getIsdefaultstartend()不为1，考勤日期范围例如[26,下月25]。
			 */
			if(monthReport.getYearmonth()!=null){
				//带了月份  根据月份做出改变
				int year=Integer.parseInt((monthReport.getYearmonth()+"").substring(0,4));
				int month=Integer.parseInt((monthReport.getYearmonth()+"").substring(4,6));
				int month1=month-1;
				if(month1==0){//1月的上一个月  是12月  其他月份不用管
					month1=12;
				}

				if(month1==1 || month1==3 || month1==5 || month1==7 || month1==8 || month1==10 || month1==12){
					for(int i=parameters.getMonthstartday();i<=31;i++){
						list1.add(i+"");
					}
					number=31;
				}else if(month1==4 || month1==6 || month1==9 || month1==11 ){
					for(int i=parameters.getMonthstartday();i<=30;i++){
						list1.add(i+"");
					}
					number=30;
				}else{
					//只剩下2月 做平年 闰年的判断
					if(year%4==0&&year%100!=0||year%400==0){
						//闰年  2月只有29天
						for(int i=parameters.getMonthstartday();i<=29;i++){
							list1.add(i+"");
						}
						number=29;
					}else{
						//平年 2月有28天
						for(int i=parameters.getMonthstartday();i<=28;i++){
							list1.add(i+"");
						}
						number=28;
					}
				}
			}else{
				//最初进来的时候的样子
				for(int i=parameters.getMonthstartday();i<=31;i++){
					list1.add(i+"");
				}
				number=31;
			}
			//添加下一月的日期
			for(int i=1;i<parameters.getMonthstartday();i++){
				list1.add(i+"");
			}
		}

		monthReport.setCompanyno(wxUser.getCompanyno());
		monthReport.setEmployeeno(wxUser.getEmployeeNo());
		monthReport.setStatus(1);
		List<MonthReport> list_monthReport=monthReportService.list(monthReport);
		MonthReport monthReport_return= McommonService.getOneFromList(list_monthReport);

		//返回的信息体
		Map<String,Object> mapReturn=new LinkedHashMap<>();
		mapReturn.put("monthReport",monthReport_return);
		mapReturn.put("month",list1);
		mapReturn.putAll(MapProcess.convertObject_toMap(monthReport));
		mapReturn.put("number",number);

		return ResponseMessage.ok(mapReturn);
	}













}
